package com.tmt.im.manager.interfaces;

import com.alibaba.fastjson2.JSONObject;
import com.tmt.im.common.pojo.ChatSessionPoJo;
import com.tmt.im.common.pojo.IMUserPoJo;
import com.tmt.im.jpa.entity.IMUser;
import com.tmt.im.manager.interfaces.beans.ConversationType;
import com.tmt.im.manager.interfaces.beans.MessageType;
import com.tmt.springboot.chain._DynamicInterface;

import java.lang.reflect.Method;
import java.util.Map;

/**
 * @Description TODO
 * @Author wuyi
 * @Date 2024/8/23 20:25
 * @Version 1.0
 **/
@_DynamicInterface
public interface IYunXinInterface {

    /**
     * 判断当前实现类是否支持本次方法调用。
     *
     * @param iYunXinInterface
     * @param method
     * @param params
     * @return
     */
    boolean supported(IYunXinInterface iYunXinInterface, Method method, Object[] params);

    /**
     * 当用户注册时，同时向云信平台注册IM账号
     *
     * @param imUser
     * @param error
     * @return
     */
    boolean registerUser(IMUser imUser, StringBuilder error);

    /**
     * 向云信平台更新用户信息，例如：用户昵称、头像、手机号码被更新时需要同步云信平台。
     * @param imUser
     * @param error
     * @return
     */
    boolean updateUserInfo(IMUser imUser, StringBuilder error);

    /**
     * 向云信平台更新用户头像信息。
     * @param userId
     * @param avatar
     * @param error
     * @return
     */
    boolean updateUserAvatar(Long userId, String avatar, StringBuilder error);

    /**
     * 更新群组头像
     * @param tid
     * @param ownerId
     * @param avatar
     * @param error
     * @return
     */
    boolean updateSessionAvatar(Long tid, Long ownerId, String avatar, StringBuilder error);

    /**
     * 更新IM账号的令牌。
     *
     * @param imUser
     * @param error
     * @return
     */
    boolean refreshUserToken(IMUser imUser, StringBuilder error);

    /**
     * creatorId申请加targetId为好友
     *
     * @param creatorId
     * @param targetId
     * @param targetAlias
     * @param note
     * @param error
     * @return
     */
    boolean applyFriend(Long creatorId, Long targetId, int type, String targetAlias, String note, StringBuilder error);

    /**
     * 更新好友备注信息
     *
     * @param creatorId
     * @param targetId
     * @param targetAlias
     * @param error
     * @return
     */
    boolean updateFriend(Long creatorId, Long targetId, String targetAlias, StringBuilder error);

    /**
     * 删除某用户好友列表中的某个好友
     *
     * @param currentUserId
     * @param friendId
     * @param error
     * @return
     */
    boolean deleteFriend(Long currentUserId, Long friendId, StringBuilder error);

    /**
     * 将指定的好友拉入或拉出黑名单
     *
     * @param currentUserId
     * @param friendId
     * @param pullIn
     * @param error
     * @return
     */
    boolean pullInBlackBill(Long currentUserId, Long friendId, boolean pullIn, StringBuilder error);

    /**
     * 设置或解除好友的免打扰状态。
     *
     * @param currentUserId
     * @param friendId
     * @param noDisturbing
     * @param error
     * @return
     */
    boolean enableNoDisturbing(Long currentUserId, Long friendId, boolean noDisturbing, StringBuilder error);

}
